//  对 axios 进行二次封装
import axios from 'axios'
import { getToken, delToken, setToken } from '@/utils/token'
// import router from '@/router'
import { Notify } from 'vant'
import { updateLoginAPI } from '@/api'

axios.defaults.baseURL = 'http://geek.itheima.net'
axios.defaults.timeout = 5000

export default ({ url, method, params, data, headers }) => {
  return axios({
    url,
    method,
    params,
    data,
    headers
  })
}
// 拦截器统一判断http状态码
// 拦截器改请求头/参数格式...

// 添加请求拦截器
axios.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  // 如果穿请求头这边会被覆盖，所以要判断是否有Authorization字段
  if (config.headers.Authorization === undefined) {
    config.headers.Authorization = `Bearer ${getToken()}`
  }
  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 添加响应拦截器
axios.interceptors.response.use(function (response) { // http状态码: 2xx / 3xx开头
  // 对响应数据做点什么
  return response
}, async function (error) { // 4xx/5xx http状态报错
  if (error.response.status === 401) {
    console.log(error.config)
    Notify({
      type: 'danger',
      message: '身份过期, 请重新登录'
    })
    // 身份认证失败
    delToken()

    // 重新登录
    // router.rep  lace('/login') // 切换路由
    // 用户无感知，用代码重新哪一个token
    const res = await updateLoginAPI()
    setToken(res.data.data.token)
    error.config.headers.Authorization = 'Bearer ' + res.data.data.token
    return axios(error.config)
  }
  // 对响应错误做点什么
  return Promise.reject(error)
})
